package pw.hais.utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
/**
 * 安卓多屏幕 适配 工具【2016年1月7日更新】
 * 
 * @author hais1992 http://hais.pw
 */
public class ScreenTools {
    //--------------------【使用工具只需要修改这里，定义 切图的 属性，即 开发机的 信息】--------
	private static final float Image_width = 720; // 切图的 宽
	private static final float Image_height = 1280; // 切图的 高
	//--------------------【使用工具只需要修改这里END】------------------------------------
	
	// 定义 要适配的 信息screen_width 和screen_height 一对一
	private static final int screen_dpi[] = {120, 160, 240, 320, 480}; // 为以下分辨率适配这几种dpi，暂时也就只有这几种了
	//适配的分配率不够到这里来加
    private static final int screen_width[] = { 1080, 720, 540, 480, 480, 320 };
	private static final int screen_height[] = { 1920, 1280, 960, 800, 854, 480 };   
	
	// 适配信息定义
	private final static String template = "<dimen name=\"_{design}px\">{target}dp</dimen>\n";
	private static final int max_px = 2048; // 最大分辨率
	private static final String xml_file_name = "screen_adaptation_dimens.xml"; // xml文件名

	
	// 开始失配
	public static void main(String[] args) {
		if (screen_width.length != screen_height.length) {
			System.err.println("匹配的目标分辨率配置错误screen_width[0]对应screen_height[0]，为一种屏幕");
		} else {
			for (int dpiItem = 0; dpiItem < screen_dpi.length; dpiItem++) {
				for (int item = 0; item < screen_width.length; item++) {
					//生成XML文件
					outXML(screen_dpi[dpiItem], screen_width[item],screen_height[item]);
				}
			}
		}
	}

	/** 写出到 XML */
	public static void outXML(float dpi, float tgtWidth,float tgtHeight) {
		try {
			//获取文件夹名称，如 values-xhdpi-1280x720
			String filePath = dpiAndSizeToFileame((int)dpi,(int)tgtWidth, (int)tgtHeight);

			// 计算dpi比例
			float dpiRatio=Math.min(tgtWidth/Image_width, tgtHeight/Image_height); 
			System.out.println(filePath+"------"+dpiRatio);
			
			//开始生成内容
			StringBuffer stringBuffer = new StringBuffer();
			stringBuffer.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
			stringBuffer.append("<resources>\n");
			
			float target=0;
			for(int i = 1;i<max_px;i++){
				target = (i /(dpi/160)) * dpiRatio * i;	//计算设计图 的普通PX转dp
				stringBuffer.append("\t"+template.replace("{design}", i+"").replace("{target}", target+""));
			}
			stringBuffer.append("</resources>");
			
			
			createlXML(filePath,stringBuffer);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/** 根据dpi 和 屏幕尺寸生成 文件路径 */
	public static String dpiAndSizeToFileame(int dpi, int width, int height) {
		String filePath = System.getProperty("user.dir") + "/screenTools_out/";
		switch (dpi) {
		case 120:
			filePath += "values-ldpi-" + width + "x" + height;
			break;
		case 160:
			filePath += "values-mdpi-" + width + "x" + height;
			break;
		case 240:
			filePath += "values-hdpi-" + width + "x" + height;
			break;
		case 320:
			filePath += "values-xhdpi-" + width + "x" + height;
			break;
		case 480:
			filePath += "values-xxhdpi-" + width + "x" + height;
			break;
		}
		
		if(filePath.indexOf("values-ldpi-240x320")!=-1)filePath = filePath.replace("-240x320", "");
		else if(filePath.indexOf("values-mdpi-320x480")!=-1)filePath =filePath.replace("-320x480", "");
		else if(filePath.indexOf("values-hdpi-480x854")!=-1)filePath =filePath.replace("-480x854", "");
		else if(filePath.indexOf("values-xhdpi-720x1280")!=-1)filePath =filePath.replace("-720x1280", "");
		else if(filePath.indexOf("values-xxhdpi-1080x1920")!=-1)filePath =filePath.replace("-1080x1920", "");
		return filePath;
	}
	
	
	/** 创建 XML
	 * @throws Exception 
	 */
	public static void createlXML(String filePath,StringBuffer stringBuffer) throws Exception {
		File dirFile = new File(filePath); // 设置路径
		if (!dirFile.exists())dirFile.mkdirs(); // 目录不存在，则创建
		// 写出到文件
		File file = new File(dirFile, xml_file_name); // 创建文件
		PrintWriter pw = new PrintWriter(new FileOutputStream(file));
        pw.print(stringBuffer.toString());
        pw.close();
	}

}
